﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SGT_DAL._STG_DALTableAdapters;
using SGT_DAL;

namespace SGT_ON
{
    /// <summary>
    /// Clase utilizada para la presentación y propiedades derivadas.
    /// </summary>
    public partial class StockRemito
    {   
    }
    /// <summary>
    /// Clase base con la lógica de negocio
    /// </summary>
    [System.ComponentModel.DataObject]
    public partial class StockRemito
    {
        #region Atributos
        protected int _id;
        protected DateTime _FechaIngreso;
        protected DateTime _FechaCreacion;
        protected string _Numero;
        protected string _Observaciones;
        protected string _OrdenDeCompra;
        protected int _IdProveedor;

        //Objetos asociados
        protected StockLineaDeRemitoColeccion _LineasDeRemito;
        #endregion

        #region Propiedades
        public int ID
        {
            get
            {
                return _id;
            }
            set
            {
                _id = value;
            }
        }
        public DateTime FechaIngreso
        {
            get
            {
                return _FechaIngreso;
            }
            set
            {
                _FechaIngreso = value;
            }
        }
        public DateTime FechaCreacion
        {
            get
            {
                return _FechaCreacion;
            }
            set
            {
                _FechaCreacion = value;
            }
        }
        public string Numero
        {
            get
            {
                return _Numero;
            }
            set
            {
                _Numero = value;
            }
        }
        public string Observaciones
        {
            get
            {
                return _Observaciones;
            }
            set
            {
                _Observaciones = value;
            }
        }
        public string OrdenDeCompra
        {
            get
            {
                return _OrdenDeCompra;
            }
            set
            {
                _OrdenDeCompra = value;
            }
        }
        public int IdProveedor
        {
            get
            {
                return _IdProveedor;
            }
            set
            {
                _IdProveedor = value;
            }
        }

        //Objetos asociados
        /// <summary>
        /// Obtiene todas las lineas del remito.
        /// </summary>
        public StockLineaDeRemitoColeccion LineasDeRemito
        {
            get
            {
                if(_LineasDeRemito == null)
                    _LineasDeRemito = StockLineaDeRemito.ObtenerLineasDeRemito(ID);

                return _LineasDeRemito;
            }
            set
            {
                _LineasDeRemito = value;
            }   
        }

        //Propiedades derivadas
        #endregion

        #region Interfase DAL
        //objeto de la capa DAL
        private static StockRemitoTableAdapter _StockRemitoAD;
        protected static StockRemitoTableAdapter Adaptador
        {
            get
            {
                if (_StockRemitoAD == null)
                    _StockRemitoAD = new StockRemitoTableAdapter();

                return _StockRemitoAD;
            }
        }
        protected static StockRemito ObtenerPorID(int pID)
        {
            _STG_DAL.StockRemitoDataTable _dt;

            _dt = Adaptador.ObtenerPorId(pID);

            // si tiene algo,
            if (_dt.Rows.Count > 0)
                return AsignarRowAObjeto((_STG_DAL.StockRemitoRow)_dt.Rows[0]);

            return null;
        }
        protected static StockRemito AsignarRowAObjeto(_STG_DAL.StockRemitoRow pRow)
        {
            StockRemito _StockRemito = new StockRemito();
            if (pRow != null)
            {
                _StockRemito = new StockRemito();
                _StockRemito.ID = pRow.ID;
                _StockRemito.FechaIngreso = pRow.FechaIngreso;
                _StockRemito.FechaCreacion = pRow.FechaCreacion;
                _StockRemito.Numero = pRow.Numero;
                _StockRemito.Observaciones = pRow.Observaciones;
                _StockRemito.OrdenDeCompra = pRow.OrdenDeCompra;
                _StockRemito.IdProveedor = pRow.IdProveedor;
            }
            return _StockRemito;
        }
        protected StockRemito Insertar(DateTime pFechaIngreso,DateTime pFechaCreacion,string pNumero,string pObservaciones,string pOrdenDeCompra,int pIdProveedor)
        {
            ID = int.Parse(Adaptador.Insertar(pFechaIngreso, pFechaCreacion, pNumero, pObservaciones, pOrdenDeCompra, pIdProveedor).ToString());
            return this;
        }
        protected bool Actualizar(DateTime pFechaIngreso,DateTime pFechaCreacion,string pNumero,string pObservaciones,string pOrdenDeCompra,int pIdProveedor,int pID)
        {
            if (0 < Adaptador.Actualizar(pFechaIngreso, pFechaCreacion, pNumero, pObservaciones, pOrdenDeCompra, pIdProveedor, pID))
                return true;
            else
                return false;
        }
        //public void Eliminar()
        //{
        //    StockRemito _StockRemito = StockRemito.ObtenerPorID(this.ID);
        //    _StockRemito.EstaActivo = false;
        //    _StockRemito.Actualizar();
        //}
        protected static StockRemitoColeccion AsignarStockRemitoTableAdapterAStockRemitoColeccion(_STG_DAL.StockRemitoDataTable pDataTable)
        {
            StockRemitoColeccion _StockRemitoes = new StockRemitoColeccion();
            StockRemito _StockRemito;

            if ((pDataTable != null)
                && (pDataTable.Rows.Count > 0))
            {
                foreach (_STG_DAL.StockRemitoRow _row in pDataTable.Rows)
                {
                    _StockRemito = AsignarRowAObjeto(_row);
                    if (_StockRemito != null)
                        _StockRemitoes.Add(_StockRemito);
                }
            }
            return _StockRemitoes;
        }
        public static StockRemitoColeccion ObtenerEntreFechas(DateTime pDesde, DateTime pHasta)
        {
            return AsignarStockRemitoTableAdapterAStockRemitoColeccion(Adaptador.ObtenerEntrefechas(pDesde, pHasta));
        }
        public static StockRemitoColeccion ObtenerRemitosDeProveedor(int pIdProveedor)
        {
            return AsignarStockRemitoTableAdapterAStockRemitoColeccion(Adaptador.ObtenerRemitosDeProveedor(pIdProveedor));
        }
        public static StockRemitoColeccion ObtenerRemitosProNumero(string pNumero)
        {
            return AsignarStockRemitoTableAdapterAStockRemitoColeccion(Adaptador.ObtenerRemitoPorNumero(pNumero));
        }
        #endregion

        #region Métodos
        public StockRemito()
        {
            AsignarValoresIniciales();
        }

        public void AsignarValoresIniciales()
        {
            _id = -1;
            FechaIngreso = Parametros.FechaMinima;
            FechaCreacion = Parametros.FechaMinima;
            Numero = "";
            Observaciones = "";
            OrdenDeCompra = "";
            IdProveedor = -1;
        }

        public static StockRemito CrearStockRemito()
        {
            StockRemito _StockRemito = new StockRemito();
            return _StockRemito;
        }
        public static StockRemito CrearStockRemito(int pID)
        {
            StockRemito _StockRemito = ObtenerPorID(pID);
            return _StockRemito;
        }
        public void Actualizar()
        {
            Actualizar(FechaCreacion, FechaCreacion, Numero, Observaciones, OrdenDeCompra, IdProveedor, ID);
        }
        public StockRemito Insertar()
        {
            return Insertar(FechaIngreso, FechaCreacion, Numero, Observaciones, OrdenDeCompra, IdProveedor);
        }
        #endregion

        #region Metodos para datasource

        public void Actualizar(StockRemito pStockRemito)
        {
            if (pStockRemito != null)
                pStockRemito.Actualizar();
        }
        public StockRemito Insertar(StockRemito pStockRemito)
        {
            if (pStockRemito != null)
                return pStockRemito.Insertar();
            return null;
        }
        //public void Eliminar(StockRemito pStockRemito)
        //{
        //    pStockRemito.Eliminar();
        //}
        #endregion
    }
    [System.ComponentModel.DataObject]
    public class StockRemitoColeccion : System.Collections.CollectionBase
    {
        public void Add(StockRemito pStockRemito)
        {
            this.List.Add(pStockRemito);
        }
        public void AddUnico(StockRemito pStockRemito)
        {
            foreach (StockRemito _StockRemito in this)
                if (pStockRemito.ID == _StockRemito.ID)
                    return;
            this.List.Add(pStockRemito);
        }
        public void Remove(int index)
        {
            if (index <= Count - 1 || index >= 0)
            {
                this.List.RemoveAt(index);
            }
            else
            {
                throw new System.ArgumentException("Fuera de rango", "original");
            }
        }
        public void Remove(StockRemito pStockRemito)
        {
            for (int i = 0; i < this.Count; i++)
            {
                if (this[i].ID == pStockRemito.ID)
                {
                    Remove(i);
                    return;
                }

            }
        }
        public StockRemito this[int index]
        {
            get { return ((StockRemito)(this.List[index])); }
            set { this.List[index] = value; }
        }
        public void ActualizarStockRemitoes(StockRemitoColeccion pStockRemitoes)
        {
            foreach (StockRemito _StockRemito in pStockRemitoes)
            {
                _StockRemito.Actualizar();
            }
        }
        public void ActualizarStockRemito(StockRemito pStockRemito)
        {
            pStockRemito.Actualizar();
        }

        #region Metodos de colección

        #endregion
        #region Para datasource
        public void Insertar(StockRemito pStockRemito)
        {
            pStockRemito.Insertar(pStockRemito);
        }
        #endregion
    }
}



